#include "drv_spi.h"

void SPI2_Init(void)
{
    spi_init_type spi_init_struct;
    gpio_init_type gpio_initstruct;
    
    crm_periph_clock_enable(CRM_SPI2_PERIPH_CLOCK, TRUE);
    crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
    
    gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE3, GPIO_MUX_6);
    gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE5, GPIO_MUX_6);
    
    gpio_default_para_init(&gpio_initstruct);
	gpio_initstruct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
	gpio_initstruct.gpio_mode = GPIO_MODE_MUX;
	gpio_initstruct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
	gpio_initstruct.gpio_pins = GPIO_PINS_3 | GPIO_PINS_5;
	gpio_initstruct.gpio_pull = GPIO_PULL_NONE;
	gpio_init(GPIOB, &gpio_initstruct);
    
    spi_i2s_reset(SPI2);
    spi_default_para_init(&spi_init_struct);
    spi_init_struct.transmission_mode = SPI_TRANSMIT_FULL_DUPLEX;
    spi_init_struct.master_slave_mode = SPI_MODE_MASTER;
    spi_init_struct.mclk_freq_division = SPI_MCLK_DIV_2;
    spi_init_struct.first_bit_transmission = SPI_FIRST_BIT_MSB;
    spi_init_struct.frame_bit_num = SPI_FRAME_8BIT;
    spi_init_struct.clock_polarity = SPI_CLOCK_POLARITY_HIGH;
    spi_init_struct.clock_phase = SPI_CLOCK_PHASE_2EDGE;
    spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE;
    spi_init(SPI2, &spi_init_struct);
    
    spi_i2s_dma_transmitter_enable(SPI2, TRUE);
    spi_enable(SPI2, TRUE);
}